//
//  AYuUserAccountViewModel.swift
//  SHWeibo3
//
//  Created by 余伟康 on 16/7/22.
//  Copyright © 2016年 wangce. All rights reserved.
//

import UIKit

class AYuUserAccountViewModel: NSObject {

    // 路径
    let file = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("userAccount.archiver")
    
    // 全局访问点
    static let sharedTools:AYuUserAccountViewModel = AYuUserAccountViewModel()
    
    // 创建一个用户模型
    var userAccount:AYuUserAccount?
    
    var accessToken:String?{
        if userAccount?.access_token != nil{
            // 看是否过期
            if userAccount?.expires_Date?.compare(NSDate()) == NSComparisonResult.OrderedDescending{
                return userAccount?.access_token
            }else{
                // 代表已经过期
                return nil
            }
        }else{
            // 代表没有accountToken
            return nil
        }
    }
    
    
    
    var isLogin:Bool{
        return accessToken != nil
    }
    
    override init() {
        super.init()
        userAccount = getUserAccount()
    }
 
    
}

// MARK: - 归档和解档
extension AYuUserAccountViewModel{
    // 保存对象
    func saveUserAccount(userAccount:AYuUserAccount){
        self.userAccount = userAccount
        // 保存对象
        NSKeyedArchiver.archiveRootObject(userAccount, toFile: file)
    }
    
    func getUserAccount()->AYuUserAccount?{
        let result = NSKeyedUnarchiver.unarchiveObjectWithFile(file) as? AYuUserAccount
        return result
    }
}

// MARK: - 请求数据

extension AYuUserAccountViewModel{
    
    // 请求userAccount
    func loadUserAccount(code:String,isSuccess:(isSucc:Bool)->()){
        AYuNetworkTools.sharedTools.oauthLoadUserAccount(code, success: { (response) -> () in
            // 当在guard 或者if let中 使用as  一般情况下 都是使用as?
            // 判断response是否为nil 而且是否可以转成字典
            guard let res = response as? [String: AnyObject] else{
                isSuccess(isSucc: false)
                return
            }
            // 字典转模型
            let userAccount = AYuUserAccount(dict: res)
            self.loadUserInfo(userAccount, isSuccess: isSuccess)
            }) { (error) -> () in
                print("...请求失败\(error)")
                isSuccess(isSucc: false)
        }
    }
    
    // 请求用户信息
    func loadUserInfo(userAccount: AYuUserAccount, isSuccess:(isSucc: Bool)->()){
        AYuNetworkTools.sharedTools.oauthLoadUserInfo(userAccount, success: { (response) -> () in
            // 判断response是否为nil 而且是否可以转成字典
            guard let res = response as? [String: AnyObject] else{
                isSuccess(isSucc: false)
                return
            }
            // 因为当前的screenname 和avatar_large 本来就是可选值 所以在as的时候 只用as? 转字符串
            // 给其userAccount身上两个为nil的属性赋值
            userAccount.screen_name = res["screen_name"] as? String
            userAccount.avatar_large = res["avatar_large"] as? String
            print(userAccount)
            // 通过归档保存数据
            self.saveUserAccount(userAccount)
            isSuccess(isSucc: true)
            }) { (error) -> () in
                print("..请求失败:\(error)")
                isSuccess(isSucc: false)
        }
    }


}
























